Chapter 3 -- Graph ( 3 )
Application of BFS -- Testing Bipartiteness
Definition
The nodes of graph can be partitioned into two sets
從此定義我們可以推得兩個 bipartite graph 性質
了解其定義後,我們要問的問題是,給定一個 graph,我們如何判定是否為 bipartite graph ? 直覺一點的方式就是直接將每一個 edge 的兩個端點塗上兩個不同的顏色,然後看看是否會有衝突的地方。
如果寫成 procedure 的話 (假設
1 | 1. 先任選一點 s∈V,並且將其著色成紅色 |
這個 procedure 要 implement 其實就是用 BFS,只是在 BFS procedure 中每一個 layer 再多加一個著色的動作即可。
[ 補充 ]
實際上,有一個定理可以幫助我們更方便來做判定 :
Claim :
Proof :
(2.
從上圖可以知道
(2.
(1.) Clearly by 2.
Connectivity in directed graphs
Definition
- Nodes
are mutually reachable if a path from to and also a path from to 若兩點間互相存在一條 path 可以從一點到另一點,則稱之為 mutmally reachable。 - A directed graph is strongly connected if
pairs of nodes are mutually reachable. 一個有向圖若任兩點均為 mutually reachable,則稱其為 stronglly connected。 - The strongly (connected) component
containing in a directed graph is the maximal set if s.t. and are mutually reachable. 所有和 為 mutually reachable 的 nodes 形成一個 strongly component。
Lemma
Testing strongly connectivity
如果給定一個 directed graph ,我們可以如何檢查它是否為 strongly connected ? 最直覺也是最笨的方式就是做兩次 BFS,第一次先檢查
然而這樣的複雜度太高,因此稍微調整一下。
1 | TestStronglyConnectivity(G): |
這裡每一個步驟都是 linear time complexity,最後的總時間複雜度為
關於 strongly (connected) component 有一些蠻有趣的性質
- 任一個 directed graph 必可以拆出數個 strongly (connected) component。
- 將 directed graph 的所有 strongly (connected) component 都各自視為一個點,那麼必會形成一個 directed acyclic graph。
Theorem
Proof :
( Case 1. )
Clearly be definition.
( Case 2. )
Suppose to the contrary that